package stu.day33_day38.day36;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

public class hw2 {

    public List<Integer> findAnagrams(String s, String p) {

        if(p.length()>s.length()){
            return new ArrayList<>();
        }

        List<Integer> list = new ArrayList<>();
        HashMap<Character,Integer> map = new HashMap<>();
        int k = p.length();

        for(int i=0;i<k;i++){
            char ch = p.charAt(i);
            int n = map.getOrDefault(ch,0);
            map.put(ch,n+1);
        }

        for(int i=0;i<k-1;i++){
            char ch = s.charAt(i);
            if(map.containsKey(ch)){
                int n = map.get(ch);
                map.put(ch,n-1);
            }
        }

        for(int i=k-1;i<s.length();i++){
            char ch = s.charAt(i);
            if(map.containsKey(ch)){
                int n = map.get(ch);
                map.put(ch,n-1);
            }

            if(del(map)){
                list.add(i-k+1);
            }

            char ch1 = s.charAt(i-k+1);
            if(map.containsKey(ch1)){
                int n1 = map.get(ch1);
                map.put(ch1,n1+1);
            }
        }
        return list;
    }

    public boolean del(HashMap<Character,Integer> map){
        for(Character ch:map.keySet()){
            if(map.get(ch)>0){
                return false;
            }
        }
        return true;
    }


    public int maximumUniqueSubarray(int[] nums) {

        int max = 0;
        int left = 0;
        int sum = 0;

        HashMap<Integer,Integer> map = new HashMap<>();
        for(int r=0;r<nums.length;r++){
            int num = nums[r];
            int n = map.getOrDefault(num,0);
            map.put(num,n+1);
            sum += num;


            while(map.size()!=(r-left+1)){
                int m = nums[left];
                int t = map.get(m);
                sum -= m;
                if(t==1){
                    map.remove(m);
                }else {
                    map.put(m,t-1);
                }
                left += 1;
            }


            max = Math.max(max,sum);
        }
        return max;

    }

    public boolean cal(HashMap<Integer,Integer> map){
        for(Integer x:map.keySet()){
            if(map.get(x)>1){
                return false;
            }
        }
        return true;
    }





}
